/*  lexeme.h
    
    Header for Lexeme class

    Nicholas Green
    Lexical Analyzer
*/

#ifndef LEXEME_H
#define LEXEME_H
#include <string>
#include "types.h"
using std::string;

class Lexeme
{
public:
  const char* tVal;
  int iVal;
  double rVal;
  std::string sVal;
  int line;

public:
  Lexeme* leftPtr;
  Lexeme* rightPtr;
  //Constructors
  Lexeme();
  Lexeme(const Lexeme& copy);
  Lexeme(const char*,int l);
  Lexeme(const char*,int,Lexeme* left,Lexeme* right);
  Lexeme(const char*, int i,int l);
  Lexeme(const char*, int i, int l, Lexeme* left, Lexeme* right);
  Lexeme(const char*, double d, int l);
  Lexeme(const char*, double d, int l, Lexeme* left, Lexeme* right);
  Lexeme(const char*, string s, int l);
  Lexeme(const char*, string s, int l, Lexeme* left, Lexeme* right);
  //Destructor
  ~Lexeme(void);
  //Methods
  const char* getTVal(){return tVal;}
  std::string getSVal() {return sVal;}
  Lexeme* const getLeft()  { return leftPtr;  }
  Lexeme* const getRight() { return rightPtr; }
  int getLine() {return line;}
  void print(void);
  
};
#endif
